package com.nantes.nantourage.utils;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.util.Base64;

public class FileHelper {

    /**
     * Copie le fichier source vers le fichier de destination
     * 
     * @param source
     * @param dest
     * @throws IOException
     */
    public static void copyFile(File source, File dest) throws IOException {

        FileInputStream fin = new FileInputStream(source);

        // si le r�pertoire de destination n'existe pas on le cr�e
        if(!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }

        FileOutputStream fos = new FileOutputStream(dest);

        byte[] buffer = new byte[1024];
        int length;
        while((length = fin.read(buffer)) > 0) {
            fos.write(buffer, 0, length);
        }

        fos.flush();
        fos.close();
        fin.close();
    }

    /**
     * Copie le flux source vers le fichier de destination
     * 
     * @param source
     * @param dest
     * @throws IOException
     */
    public static void copyFile(InputStream source, File dest) throws IOException {

        // si le r�pertoire de destination n'existe pas on le cr�e
        if(!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }

        FileOutputStream fos = new FileOutputStream(dest);

        byte[] buffer = new byte[1024];
        int length;
        while((length = source.read(buffer)) > 0) {
            fos.write(buffer, 0, length);
        }

        fos.flush();
        fos.close();
    }

    /**
     * Retourne le contenu du fichier sous forme de cha�ne de caract�re
     * 
     * @param source
     * @return
     */
    public static String readFileAsString(File source) {

        try {
            byte[] buffer = new byte[(int) source.length()];
            BufferedInputStream f = null;
            try {
                f = new BufferedInputStream(new FileInputStream(source));
                f.read(buffer);
            } finally {
                if(f != null) {
                    try {
                        f.close();
                    } catch (IOException ignored) {
                    }
                }
            }
            return new String(buffer, "UTF-8");
        } catch (IOException ex) {
            return "";
        }
    }

    /**
     * Encode le contenu du fichier en base 64 et le retourne sous forme de cha�ne de caract�res
     * 
     * @param source
     * @return
     */
    public static String encode64FileAsString(File source) {

        try {
            byte[] buffer = new byte[(int) source.length()];
            BufferedInputStream f = null;
            try {
                f = new BufferedInputStream(new FileInputStream(source));
                f.read(buffer);
            } finally {
                if(f != null) {
                    try {
                        f.close();
                    } catch (IOException ignored) {
                    }
                }
            }

            return Base64.encodeToString(buffer, Base64.DEFAULT);
        } catch (IOException ex) {
            return "";
        }
    }
}
